package string;
// String 的演示
public class SrtingDemo {
    public static void main(String[] args) {
        /*
        常见面试题：
        String s=new String("hello");
        问：如上语句创建了几个对象？
        答：2个
        第一个：字面量"hello"
        ----java会创建一个String对象表示字面量"hello",并将其存入常量池中
        第二个：new String()
        ----new String()时会再创建一个字符串,并引用hello字符串内容
         */
        String s=new String("hello"); //创建了2个对象
        String s1="hello"; //复用常量池中的字面量对象地址
        System.out.println(s==s1); //==比较的是地址是否相同


        //在实际应用中，String比较相等一般都是比较字符串的内容是否相同
        //因为我们需要使用equals()方法来比较两个字符串内容是否相同

        System.out.println(s.equals(s1)); //true，equals()比较的是内容是否相同











        /*
        String s1="123abc"; //堆中创建123abc字符量对象，并缓存到常量池中
        //编译器在编译时，若发现是两个字面量相连，则会直接连接好并将结果保存起来
        //如下语句会被编译为：String s2="123abc";

        String s2="123"+"abc";
        System.out.println(s1==s2);

        String s3="123";
        //因为s3是一个变量，所以在编译期并不会直接编译好
        String s4=s3+"abc"; //创建一个新的对象存储123abc
        System.out.println(s1==s4); //false




         */




        /*
        String s1="123abc";
        String s2="123abc";
        String s3="123abc";
        //引用类型


        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s2==s3);
        s1=s1+"i";
        System.out.println(s1==s2);




         */



    }
}
